home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / ddeshare / ddesh.c next >
C/C++ Source or Header  |  1992-12-31  |  6KB  |  197 lines

  1. //*************************************************************************
  2. //    DDESH.DLL
  3. //
  4. //    DDEShare functions for Visual Basic.
  5. //
  6. //    Software Assist Corporation - 1992
  7. //
  8. //*************************************************************************
  9. #include <windows.h>
  10. #include <nddeapi.h>
  11. #include <vbapi.h>
  12. #include <string.h>
  13.  
  14. typedef struct PassShareInfo_tag
  15.     {
  16.     char            szAppName[MAX_APPNAME+1];
  17.     char            szTopicName[MAX_TOPICNAME+1];
  18.     char            szItemName[MAX_ITEMNAME+1];
  19.     char                szPassword1[MAX_PASSWORD];
  20.     DWORD                       dwPermissions1;
  21.     char                szPassword2[MAX_PASSWORD];
  22.     DWORD                       dwPermissions2;
  23.     } PASSSHAREINFO, *PPASSSHAREINFO, FAR *LPPASSSHAREINFO;
  24.  
  25.  
  26. //*************************************************************************
  27. //     LibMain -
  28. //           Standard DLL constructor.
  29. //        Allocate local memory to store Global handles to
  30. //        FileCon entries for each file.
  31. //*************************************************************************
  32.  
  33. #pragma argsused
  34. int FAR pascal LibMain(HANDLE hModule,
  35.             WORD wDataSeg,
  36.             WORD cbHeapSize,
  37.             LPSTR lpszCmdLine)
  38. {
  39.     if (cbHeapSize > 0)
  40.     UnlockData(0);        
  41.     return (1);
  42. }
  43.  
  44. //*************************************************************************
  45. //     WEP -                                                                 
  46. //           Standard DLL destructor.  Free up local memory and quit.            
  47. //*************************************************************************
  48. #pragma argsused
  49. int FAR pascal WEP(int bSystemExit)
  50. {
  51.     return (1);
  52. }
  53.  
  54. //************************************************************************
  55. //    VBGetNodeName
  56. //    Return a string containing the node name.
  57. //*************************************************************************
  58. HLSTR FAR pascal _export VBGetNodeName(void)
  59. {
  60. char    szNodeName[MAX_DOMAINNAME+1];
  61.  
  62.     if (NDdeGetNodeName(&szNodeName[0],MAX_DOMAINNAME+1)!=NDDE_NO_ERROR)
  63.         return(VBCreateTempHlstr(NULL,NULL));
  64.     return(VBCreateTempHlstr(&szNodeName[0],lstrlen(&szNodeName[0])));
  65. }
  66.  
  67. //************************************************************************
  68. //    VBShareDel
  69. //    Delete a share name.
  70. //*************************************************************************
  71. int FAR pascal _export VBShareDel(LPSTR pszShareName)
  72. {
  73.  
  74.     return(NDdeShareDel(NULL,pszShareName,NULL));
  75.  
  76. //************************************************************************
  77. //    VBShareEnum
  78. //    Return a list of currently defined shares.
  79. //*************************************************************************
  80. int FAR pascal _export VBShareEnum(HANDLE hWnd)
  81. {
  82. HGLOBAL        hGbl;
  83. LPBYTE        pBuff;
  84. DWORD        nNames;
  85. DWORD        nRemain;
  86. DWORD        i;
  87. int               rc;
  88.  
  89.     hGbl=GlobalAlloc(GHND,10000);
  90.     if (hGbl==NULL)
  91.         return(NDDE_OUT_OF_MEMORY);
  92.     pBuff=GlobalLock(hGbl);
  93.  
  94.     rc=NDdeShareEnum(0,0,pBuff,10000,&nNames,&nRemain);
  95.     for(i=1; i<=nNames; i++)
  96.     {
  97.         SendMessage(hWnd,LB_ADDSTRING,NULL,(LONG)(LPSTR)pBuff);
  98.         pBuff=pBuff+lstrlen(pBuff)+1;
  99.     }
  100.     GlobalUnlock(hGbl);
  101.     GlobalFree(hGbl);
  102.     return(rc);
  103. }
  104.  
  105. //************************************************************************
  106. //    VBShareGetInfo
  107. //         Get information on an existing share entry.
  108. //*************************************************************************
  109. int FAR pascal _export VBShareGetInfo(LPSTR pszShareName,
  110.                 PPASSSHAREINFO pPShare)
  111. {
  112. NDDESHAREINFO        AShare;
  113. HGLOBAL            hGbl;
  114. LPBYTE            pBuff;
  115. DWORD            nBuff;
  116. int            rc;
  117. DWORD            nBytes;
  118. WORD            nItems;
  119. LPBYTE            tChar;
  120.  
  121.     nBuff=sizeof(AShare)+(MAX_PASSWORD*2)+2
  122.         +MAX_DOMAINNAME+1
  123.         +MAX_APPNAME+1
  124.         +MAX_TOPICNAME+1
  125.         +MAX_ITEMNAME+1;
  126.     hGbl=GlobalAlloc(GHND,nBuff);
  127.     if (hGbl==NULL)
  128.         return(NDDE_OUT_OF_MEMORY);
  129.     pBuff=GlobalLock(hGbl);
  130.  
  131.     rc=NDdeShareGetInfo(NULL,pszShareName,2,
  132.         (PNDDESHAREINFO)pBuff,nBuff,&nBytes,&nItems);
  133.     if (rc!=NDDE_NO_ERROR)
  134.         {
  135.         GlobalUnlock(hGbl);
  136.                 GlobalFree(hGbl);
  137.         return(rc);
  138.     }
  139.     hmemcpy(&AShare,pBuff,sizeof(AShare));
  140.     _fmemset(pPShare->szPassword1,' ',MAX_PASSWORD);
  141.         if (AShare.cbPassword1>0)
  142.         hmemcpy(pPShare->szPassword1,AShare.lpbPassword1,AShare.cbPassword1);
  143.     pPShare->dwPermissions1=AShare.dwPermissions1;
  144.     _fmemset(pPShare->szPassword2,' ',MAX_PASSWORD);
  145.         if (AShare.cbPassword2>0)
  146.         hmemcpy(pPShare->szPassword2,AShare.lpbPassword2,AShare.cbPassword2);
  147.     pPShare->dwPermissions2=AShare.dwPermissions2;
  148.     _fmemset(pPShare->szAppName,' ',MAX_APPNAME+1);
  149.     lstrcpy(pPShare->szAppName,AShare.lpszTargetApp);
  150.     tChar=(LPBYTE)pPShare->szAppName+lstrlen(AShare.lpszTargetApp);
  151.         *tChar=' ';
  152.     _fmemset(pPShare->szTopicName,' ',MAX_TOPICNAME+1);
  153.     lstrcpy(pPShare->szTopicName,AShare.lpszTargetTopic);
  154.     tChar=(LPBYTE)pPShare->szTopicName+lstrlen(AShare.lpszTargetTopic);
  155.     *tChar=' ';
  156.     _fmemset(pPShare->szItemName,' ',MAX_ITEMNAME+1);
  157.     lstrcpy(pPShare->szItemName,AShare.lpszItem);
  158.     tChar=(LPBYTE)pPShare->szItemName+lstrlen(AShare.lpszItem);
  159.     *tChar=' ';
  160.     GlobalUnlock(hGbl);
  161.     GlobalFree(hGbl);
  162.     return(rc);
  163. }
  164.  
  165. //************************************************************************
  166. //    VBShareUpdate
  167. //    Update a share entry.
  168. //*************************************************************************
  169. int FAR pascal _export VBShareUpdate(LPSTR pszShareName,
  170.                 LPSTR pszAppName,
  171.                 LPSTR pszTopName,
  172.                 LPSTR pszItemName,
  173.                 LPSTR pszPswd1,
  174.                 LPSTR pszPswd2,
  175.                 DWORD Perm1,
  176.                                 DWORD Perm2)
  177. {
  178. NDDESHAREINFO        AShare;
  179.  
  180.     NDdeShareDel(NULL,pszShareName,NULL);
  181.  
  182.     _fstrcpy(AShare.szShareName,pszShareName);
  183.     AShare.lpszTargetApp=pszAppName;
  184.     AShare.lpszTargetTopic=pszTopName;
  185.     AShare.lpbPassword1=pszPswd1;
  186.     AShare.cbPassword1=lstrlen(pszPswd1);
  187.     AShare.lpbPassword2=pszPswd2;
  188.     AShare.cbPassword2=lstrlen(pszPswd2);
  189.     AShare.dwPermissions1=Perm1;
  190.     AShare.dwPermissions2=Perm2;
  191.     AShare.lpszItem=pszItemName;
  192.     AShare.cAddItems=0;
  193.         AShare.lpNDdeShareItemInfo=NULL;
  194.  
  195.     return(NDdeShareAdd(NULL,2,&AShare,sizeof(AShare)));
  196. }